// vite.config.ts
import process4 from 'node:process';
import { URL, fileURLToPath } from 'node:url';
import {
    defineConfig,
    loadEnv
} from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/vite@5.4.6_@types+node@22.5.5_sass@1.79.3/node_modules/vite/dist/node/index.js';

// build/plugins/index.ts
import vue from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/@vitejs+plugin-vue@5.1.4_vite@5.4.6_@types+node@22.5.5_sass@1.79.3__vue@3.5.7_typescript@5.6.2_/node_modules/@vitejs/plugin-vue/dist/index.mjs';
import vueJsx from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/@vitejs+plugin-vue-jsx@4.0.1_vite@5.4.6_@types+node@22.5.5_sass@1.79.3__vue@3.5.7_typescript@5.6.2_/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs';
import VueDevtools from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/vite-plugin-vue-devtools@7.4.5_rollup@4.22.5_vite@5.4.6_@types+node@22.5.5_sass@1.79.3__vue@3.5.7_typescript@5.6.2_/node_modules/vite-plugin-vue-devtools/dist/vite.mjs';
import progress from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/vite-plugin-progress@0.0.7_vite@5.4.6_@types+node@22.5.5_sass@1.79.3_/node_modules/vite-plugin-progress/dist/index.mjs';

// build/plugins/router.ts
import ElegantVueRouter from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/@elegant-router+vue@0.3.8/node_modules/@elegant-router/vue/dist/vite.mjs';
function setupElegantRouter() {
    return ElegantVueRouter({
        layouts: {
            base: 'src/layouts/base-layout/index.vue',
            blank: 'src/layouts/blank-layout/index.vue'
        },
        routePathTransformer(routeName, routePath) {
            const key = routeName;
            if (key === 'login') {
                const modules = ['pwd-login', 'code-login', 'register', 'reset-pwd', 'bind-wechat'];
                const moduleReg = modules.join('|');
                return `/login/:module(${moduleReg})?`;
            }
            return routePath;
        },
        onRouteMetaGen(routeName) {
            const key = routeName;
            const constantRoutes = ['login', '403', '404', '500'];
            const meta = {
                title: key,
                i18nKey: `route.${key}`
            };
            if (constantRoutes.includes(key)) {
                meta.constant = true;
            }
            return meta;
        }
    });
}

// build/plugins/unocss.ts
import process2 from 'node:process';
import path from 'node:path';
import unocss from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/@unocss+vite@0.62.4_rollup@4.22.5_vite@5.4.6_@types+node@22.5.5_sass@1.79.3_/node_modules/@unocss/vite/dist/index.mjs';
import presetIcons from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/@unocss+preset-icons@0.62.4/node_modules/@unocss/preset-icons/dist/index.mjs';
import { FileSystemIconLoader } from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/@iconify+utils@2.1.33/node_modules/@iconify/utils/lib/loader/node-loaders.mjs';
function setupUnocss(viteEnv) {
    const { VITE_ICON_PREFIX, VITE_ICON_LOCAL_PREFIX } = viteEnv;
    const localIconPath = path.join(process2.cwd(), 'src/assets/svg-icon');
    const collectionName = VITE_ICON_LOCAL_PREFIX.replace(`${VITE_ICON_PREFIX}-`, '');
    return unocss({
        presets: [
            presetIcons({
                prefix: `${VITE_ICON_PREFIX}-`,
                scale: 1,
                extraProperties: {
                    display: 'inline-block'
                },
                collections: {
                    [collectionName]: FileSystemIconLoader(localIconPath, (svg) =>
                        svg.replace(/^<svg\s/, '<svg width="1em" height="1em" ')
                    )
                },
                warn: true
            })
        ]
    });
}

// build/plugins/unplugin.ts
import process3 from 'node:process';
import path2 from 'node:path';
import Icons from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/unplugin-icons@0.19.3_@vue+compiler-sfc@3.5.10_webpack-sources@3.2.3/node_modules/unplugin-icons/dist/vite.js';
import IconsResolver from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/unplugin-icons@0.19.3_@vue+compiler-sfc@3.5.10_webpack-sources@3.2.3/node_modules/unplugin-icons/dist/resolver.js';
import Components from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/unplugin-vue-components@0.27.4_@babel+parser@7.25.6_rollup@4.22.5_vue@3.5.7_typescript@5.6.2__webpack-sources@3.2.3/node_modules/unplugin-vue-components/dist/vite.js';
import {
    AntDesignVueResolver,
    NaiveUiResolver
} from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/unplugin-vue-components@0.27.4_@babel+parser@7.25.6_rollup@4.22.5_vue@3.5.7_typescript@5.6.2__webpack-sources@3.2.3/node_modules/unplugin-vue-components/dist/resolvers.js';
import { FileSystemIconLoader as FileSystemIconLoader2 } from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/unplugin-icons@0.19.3_@vue+compiler-sfc@3.5.10_webpack-sources@3.2.3/node_modules/unplugin-icons/dist/loaders.js';
import { createSvgIconsPlugin } from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/vite-plugin-svg-icons@2.0.1_vite@5.4.6_@types+node@22.5.5_sass@1.79.3_/node_modules/vite-plugin-svg-icons/dist/index.mjs';
function setupUnplugin(viteEnv) {
    const { VITE_ICON_PREFIX, VITE_ICON_LOCAL_PREFIX } = viteEnv;
    const localIconPath = path2.join(process3.cwd(), 'src/assets/svg-icon');
    const collectionName = VITE_ICON_LOCAL_PREFIX.replace(`${VITE_ICON_PREFIX}-`, '');
    const plugins = [
        Icons({
            compiler: 'vue3',
            customCollections: {
                [collectionName]: FileSystemIconLoader2(localIconPath, (svg) =>
                    svg.replace(/^<svg\s/, '<svg width="1em" height="1em" ')
                )
            },
            scale: 1,
            defaultClass: 'inline-block'
        }),
        Components({
            dts: 'src/typings/components.d.ts',
            types: [{ from: 'vue-router', names: ['RouterLink', 'RouterView'] }],
            resolvers: [
                AntDesignVueResolver({
                    importStyle: false
                }),
                NaiveUiResolver(),
                IconsResolver({
                    customCollections: [collectionName],
                    componentPrefix: VITE_ICON_PREFIX
                })
            ]
        }),
        createSvgIconsPlugin({
            iconDirs: [localIconPath],
            symbolId: `${VITE_ICON_LOCAL_PREFIX}-[dir]-[name]`,
            inject: 'body-last',
            customDomId: '__SVG_ICON_LOCAL__'
        })
    ];
    return plugins;
}

// build/plugins/html.ts
function setupHtmlPlugin(buildTime) {
    const plugin = {
        name: 'html-plugin',
        apply: 'build',
        transformIndexHtml(html) {
            return html.replace(
                '<head>',
                `<head>
    <meta name="buildTime" content="${buildTime}">`
            );
        }
    };
    return plugin;
}

// build/plugins/electron.ts
import fs from 'node:fs';
import electron from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/vite-plugin-electron@0.28.8_vite-plugin-electron-renderer@0.14.6/node_modules/vite-plugin-electron/dist/simple.mjs';

// package.json
var package_default = {
    name: 'soybean-admin',
    type: 'module',
    version: '1.3.7',
    main: 'dist-electron/main/index.js',
    description:
        'A fresh and elegant admin template, based on Vue3\u3001Vite3\u3001TypeScript\u3001NaiveUI and UnoCSS. \u4E00\u4E2A\u57FA\u4E8EVue3\u3001Vite3\u3001TypeScript\u3001NaiveUI and UnoCSS\u7684\u6E05\u65B0\u4F18\u96C5\u7684\u4E2D\u540E\u53F0\u6A21\u7248\u3002',
    author: {
        name: 'Soybean',
        email: 'soybeanjs@outlook.com',
        url: 'https://github.com/soybeanjs'
    },
    license: 'MIT',
    homepage: 'https://github.com/soybeanjs/soybean-admin',
    repository: {
        url: 'https://github.com/soybeanjs/soybean-admin.git'
    },
    bugs: {
        url: 'https://github.com/soybeanjs/soybean-admin/issues'
    },
    keywords: [
        'Vue3 admin ',
        'vue-admin-template',
        'Vite5',
        'TypeScript',
        'naive-ui',
        'naive-ui-admin',
        'ant-design-vue v4',
        'UnoCSS'
    ],
    engines: {
        node: '>=18.12.0',
        pnpm: '>=8.7.0'
    },
    scripts: {
        build: 'vite build --mode prod',
        'build:test': 'vite build --mode test',
        cleanup: 'sa cleanup',
        commit: 'sa git-commit',
        'commit:zh': 'sa git-commit -l=zh-cn',
        dev: 'vite --mode test',
        'dev-electron': 'vite --mode test electron',
        'dev:prod': 'vite --mode prod',
        'gen-route': 'sa gen-route',
        lint: 'eslint . --fix',
        prepare: 'simple-git-hooks',
        preview: 'vite preview',
        release: 'sa release',
        typecheck: 'vue-tsc --noEmit --skipLibCheck',
        'update-pkg': 'sa update-pkg'
    },
    dependencies: {
        '@better-scroll/core': '2.5.1',
        '@iconify/vue': '4.1.2',
        '@sa/axios': 'workspace:*',
        '@sa/color': 'workspace:*',
        '@sa/hooks': 'workspace:*',
        '@sa/materials': 'workspace:*',
        '@sa/utils': 'workspace:*',
        '@vueuse/core': '11.1.0',
        clipboard: '2.0.11',
        dayjs: '1.11.13',
        echarts: '5.5.1',
        json5: '2.2.3',
        'naive-ui': '2.39.0',
        nprogress: '0.2.0',
        pinia: '2.2.2',
        'tailwind-merge': '2.5.2',
        vue: '3.5.7',
        'vue-draggable-plus': '0.5.3',
        'vue-i18n': '10.0.1',
        'vue-router': '4.4.5',
        electron: '^33.0.1',
        'electron-builder': '^25.1.8',
        'vite-plugin-electron': '^0.28.8',
        'vite-plugin-electron-renderer': '^0.14.6'
    },
    devDependencies: {
        '@elegant-router/vue': '0.3.8',
        '@iconify/json': '2.2.251',
        '@sa/scripts': 'workspace:*',
        '@sa/uno-preset': 'workspace:*',
        '@soybeanjs/eslint-config': '1.4.1',
        '@types/node': '22.5.5',
        '@types/nprogress': '0.2.3',
        '@unocss/eslint-config': '0.62.4',
        '@unocss/preset-icons': '0.62.4',
        '@unocss/preset-uno': '0.62.4',
        '@unocss/transformer-directives': '0.62.4',
        '@unocss/transformer-variant-group': '0.62.4',
        '@unocss/vite': '0.62.4',
        '@vitejs/plugin-vue': '5.1.4',
        '@vitejs/plugin-vue-jsx': '4.0.1',
        eslint: '9.11.0',
        'eslint-plugin-vue': '9.28.0',
        'lint-staged': '15.2.10',
        sass: '1.79.3',
        'simple-git-hooks': '2.11.1',
        tsx: '4.19.1',
        typescript: '5.6.2',
        'unplugin-icons': '0.19.3',
        'unplugin-vue-components': '0.27.4',
        vite: '5.4.6',
        'vite-plugin-progress': '0.0.7',
        'vite-plugin-svg-icons': '2.0.1',
        'vite-plugin-vue-devtools': '7.4.5',
        'vue-eslint-parser': '9.4.3',
        'vue-tsc': '2.1.6'
    },
    'simple-git-hooks': {
        'commit-msg': 'pnpm sa git-commit-verify',
        'pre-commit': 'pnpm typecheck && pnpm lint-staged'
    },
    'lint-staged': {
        '*': 'eslint --fix'
    },
    website: 'https://admin.soybeanjs.cn'
};

// build/plugins/electron.ts
function setupElectron(command) {
    fs.rmSync('dist-electron', { recursive: true, force: true });
    const isServe = command === 'serve';
    const isBuild = command === 'build';
    const sourcemap = isServe || !!process.env.VSCODE_DEBUG;
    return electron({
        main: {
            // Shortcut of `build.lib.entry`
            entry: 'electron/main/index.ts',
            onstart({ startup }) {
                if (process.env.VSCODE_DEBUG) {
                    console.log(
                        /* For `.vscode/.debug.script.mjs` */
                        '[startup] Electron App'
                    );
                } else {
                    startup();
                }
            },
            vite: {
                build: {
                    sourcemap,
                    minify: isBuild,
                    outDir: 'dist-electron/main',
                    rollupOptions: {
                        // Some third-party Node.js libraries may not be built correctly by Vite, especially `C/C++` addons,
                        // we can use `external` to exclude them to ensure they work correctly.
                        // Others need to put them in `dependencies` to ensure they are collected into `app.asar` after the app is built.
                        // Of course, this is not absolute, just this way is relatively simple. :)
                        external: Object.keys(
                            'dependencies' in package_default ? package_default.dependencies : {}
                        )
                    }
                }
            }
        },
        preload: {
            // Shortcut of `build.rollupOptions.input`.
            // Preload scripts may contain Web assets, so use the `build.rollupOptions.input` instead `build.lib.entry`.
            input: 'electron/preload/index.ts',
            vite: {
                build: {
                    sourcemap: sourcemap ? 'inline' : void 0,
                    // #332
                    minify: isBuild,
                    outDir: 'dist-electron/preload',
                    rollupOptions: {
                        external: Object.keys(
                            'dependencies' in package_default ? package_default.dependencies : {}
                        )
                    }
                }
            }
        },
        // Ployfill the Electron and Node.js API for Renderer process.
        // If you want use Node.js in Renderer process, the `nodeIntegration` needs to be enabled in the Main process.
        // See 👉 https://github.com/electron-vite/vite-plugin-electron-renderer
        renderer: {}
    });
}

// build/plugins/index.ts
function setupVitePlugins(viteEnv, buildTime, command) {
    const plugins = [
        vue(),
        vueJsx(),
        VueDevtools(),
        setupElegantRouter(),
        setupUnocss(viteEnv),
        ...setupUnplugin(viteEnv),
        progress(),
        setupHtmlPlugin(buildTime),
        setupElectron(command)
    ];
    return plugins;
}

// src/utils/service.ts
import json5 from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/index.js';
function createServiceConfig(env) {
    const { VITE_SERVICE_BASE_URL, VITE_OTHER_SERVICE_BASE_URL } = env;
    let other = {};
    try {
        other = json5.parse(VITE_OTHER_SERVICE_BASE_URL);
    } catch {
        console.error('VITE_OTHER_SERVICE_BASE_URL is not a valid json5 string');
    }
    const httpConfig = {
        baseURL: VITE_SERVICE_BASE_URL,
        other
    };
    const otherHttpKeys = Object.keys(httpConfig.other);
    const otherConfig = otherHttpKeys.map((key) => {
        return {
            key,
            baseURL: httpConfig.other[key],
            proxyPattern: createProxyPattern(key)
        };
    });
    const config = {
        baseURL: httpConfig.baseURL,
        proxyPattern: createProxyPattern(),
        other: otherConfig
    };
    return config;
}
function createProxyPattern(key) {
    if (!key) {
        return '/proxy-default';
    }
    return `/proxy-${key}`;
}

// build/config/proxy.ts
function createViteProxy(env, enable) {
    const isEnableHttpProxy = enable && env.VITE_HTTP_PROXY === 'Y';
    if (!isEnableHttpProxy) return void 0;
    const { baseURL, proxyPattern, other } = createServiceConfig(env);
    const proxy = createProxyItem({ baseURL, proxyPattern });
    other.forEach((item) => {
        Object.assign(proxy, createProxyItem(item));
    });
    return proxy;
}
function createProxyItem(item) {
    const proxy = {};
    proxy[item.proxyPattern] = {
        target: item.baseURL,
        changeOrigin: true,
        rewrite: (path3) => path3.replace(new RegExp(`^${item.proxyPattern}`), '')
    };
    return proxy;
}

// build/config/time.ts
import dayjs from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js';
import utc from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/utc.js';
import timezone from 'file:///D:/dev%20project/h5/yzj-admin-template/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/timezone.js';
function getBuildTime() {
    dayjs.extend(utc);
    dayjs.extend(timezone);
    const buildTime = dayjs.tz(Date.now(), 'Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
    return buildTime;
}

// vite.config.ts
var __vite_injected_original_import_meta_url =
    'file:///D:/dev%20project/h5/yzj-admin-template/vite.config.ts';
var vite_config_default = defineConfig((configEnv) => {
    const viteEnv = loadEnv(configEnv.mode, process4.cwd());
    const buildTime = getBuildTime();
    const enableProxy = configEnv.command === 'serve' && !configEnv.isPreview;
    return {
        base: viteEnv.VITE_BASE_URL,
        resolve: {
            alias: {
                '~': fileURLToPath(new URL('./', __vite_injected_original_import_meta_url)),
                '@': fileURLToPath(new URL('./src', __vite_injected_original_import_meta_url))
            }
        },
        css: {
            preprocessorOptions: {
                scss: {
                    api: 'modern-compiler',
                    additionalData: `@use "@/styles/scss/global.scss" as *;`
                }
            }
        },
        plugins: setupVitePlugins(viteEnv, buildTime),
        define: {
            BUILD_TIME: JSON.stringify(buildTime)
        },
        server: {
            host: '0.0.0.0',
            port: 9527,
            open: true,
            proxy: createViteProxy(viteEnv, enableProxy),
            fs: {
                cachedChecks: false
            }
        },
        preview: {
            port: 9725
        },
        build: {
            reportCompressedSize: false,
            sourcemap: viteEnv.VITE_SOURCE_MAP === 'Y',
            commonjsOptions: {
                ignoreTryCatch: false
            }
        }
    };
});
export { vite_config_default as default };
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvcGx1Z2lucy9pbmRleC50cyIsICJidWlsZC9wbHVnaW5zL3JvdXRlci50cyIsICJidWlsZC9wbHVnaW5zL3Vub2Nzcy50cyIsICJidWlsZC9wbHVnaW5zL3VucGx1Z2luLnRzIiwgImJ1aWxkL3BsdWdpbnMvaHRtbC50cyIsICJidWlsZC9wbHVnaW5zL2VsZWN0cm9uLnRzIiwgInBhY2thZ2UuanNvbiIsICJzcmMvdXRpbHMvc2VydmljZS50cyIsICJidWlsZC9jb25maWcvcHJveHkudHMiLCAiYnVpbGQvY29uZmlnL3RpbWUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXGRldiBwcm9qZWN0XFxcXGg1XFxcXHl6ai1hZG1pbi10ZW1wbGF0ZVxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovZGV2JTIwcHJvamVjdC9oNS95emotYWRtaW4tdGVtcGxhdGUvdml0ZS5jb25maWcudHNcIjtpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgVVJMLCBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnLCBsb2FkRW52IH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBzZXR1cFZpdGVQbHVnaW5zIH0gZnJvbSAnLi9idWlsZC9wbHVnaW5zJztcbmltcG9ydCB7IGNyZWF0ZVZpdGVQcm94eSwgZ2V0QnVpbGRUaW1lIH0gZnJvbSAnLi9idWlsZC9jb25maWcnO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoY29uZmlnRW52ID0+IHtcbiAgY29uc3Qgdml0ZUVudiA9IGxvYWRFbnYoY29uZmlnRW52Lm1vZGUsIHByb2Nlc3MuY3dkKCkpIGFzIHVua25vd24gYXMgRW52LkltcG9ydE1ldGE7XG5cbiAgY29uc3QgYnVpbGRUaW1lID0gZ2V0QnVpbGRUaW1lKCk7XG5cbiAgY29uc3QgZW5hYmxlUHJveHkgPSBjb25maWdFbnYuY29tbWFuZCA9PT0gJ3NlcnZlJyAmJiAhY29uZmlnRW52LmlzUHJldmlldztcblxuICByZXR1cm4ge1xuICAgIGJhc2U6IHZpdGVFbnYuVklURV9CQVNFX1VSTCxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczoge1xuICAgICAgICAnfic6IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi8nLCBpbXBvcnQubWV0YS51cmwpKSxcbiAgICAgICAgJ0AnOiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vc3JjJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgICAgIH1cbiAgICB9LFxuICAgIGNzczoge1xuICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xuICAgICAgICBzY3NzOiB7XG4gICAgICAgICAgYXBpOiAnbW9kZXJuLWNvbXBpbGVyJyxcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YTogYEB1c2UgXCJAL3N0eWxlcy9zY3NzL2dsb2JhbC5zY3NzXCIgYXMgKjtgXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHBsdWdpbnM6IHNldHVwVml0ZVBsdWdpbnModml0ZUVudiwgYnVpbGRUaW1lKSxcbiAgICBkZWZpbmU6IHtcbiAgICAgIEJVSUxEX1RJTUU6IEpTT04uc3RyaW5naWZ5KGJ1aWxkVGltZSlcbiAgICB9LFxuICAgIHNlcnZlcjoge1xuICAgICAgaG9zdDogJzAuMC4wLjAnLFxuICAgICAgcG9ydDogOTUyNyxcbiAgICAgIG9wZW46IHRydWUsXG4gICAgICBwcm94eTogY3JlYXRlVml0ZVByb3h5KHZpdGVFbnYsIGVuYWJsZVByb3h5KSxcbiAgICAgIGZzOiB7XG4gICAgICAgIGNhY2hlZENoZWNrczogZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIHByZXZpZXc6IHtcbiAgICAgIHBvcnQ6IDk3MjVcbiAgICB9LFxuICAgIGJ1aWxkOiB7XG4gICAgICByZXBvcnRDb21wcmVzc2VkU2l6ZTogZmFsc2UsXG4gICAgICBzb3VyY2VtYXA6IHZpdGVFbnYuVklURV9TT1VSQ0VfTUFQID09PSAnWScsXG4gICAgICBjb21tb25qc09wdGlvbnM6IHtcbiAgICAgICAgaWdub3JlVHJ5Q2F0Y2g6IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9O1xufSk7XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXGRldiBwcm9qZWN0XFxcXGg1XFxcXHl6ai1hZG1pbi10ZW1wbGF0ZVxcXFxidWlsZFxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcXFxcYnVpbGRcXFxccGx1Z2luc1xcXFxpbmRleC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovZGV2JTIwcHJvamVjdC9oNS95emotYWRtaW4tdGVtcGxhdGUvYnVpbGQvcGx1Z2lucy9pbmRleC50c1wiO2ltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9uIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSc7XG5pbXBvcnQgdnVlSnN4IGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZS1qc3gnO1xuaW1wb3J0IFZ1ZURldnRvb2xzIGZyb20gJ3ZpdGUtcGx1Z2luLXZ1ZS1kZXZ0b29scyc7XG5pbXBvcnQgcHJvZ3Jlc3MgZnJvbSAndml0ZS1wbHVnaW4tcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgc2V0dXBFbGVnYW50Um91dGVyIH0gZnJvbSAnLi9yb3V0ZXInO1xuaW1wb3J0IHsgc2V0dXBVbm9jc3MgfSBmcm9tICcuL3Vub2Nzcyc7XG5pbXBvcnQgeyBzZXR1cFVucGx1Z2luIH0gZnJvbSAnLi91bnBsdWdpbic7XG5pbXBvcnQgeyBzZXR1cEh0bWxQbHVnaW4gfSBmcm9tICcuL2h0bWwnO1xuaW1wb3J0IHsgc2V0dXBFbGVjdHJvbiB9IGZyb20gJy4vZWxlY3Ryb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBWaXRlUGx1Z2lucyh2aXRlRW52OiBFbnYuSW1wb3J0TWV0YSwgYnVpbGRUaW1lOiBzdHJpbmcsIGNvbW1hbmQ6ICdidWlsZCcgfCAnc2VydmUnKSB7XG4gIGNvbnN0IHBsdWdpbnM6IFBsdWdpbk9wdGlvbiA9IFtcbiAgICB2dWUoKSxcbiAgICB2dWVKc3goKSxcbiAgICBWdWVEZXZ0b29scygpLFxuICAgIHNldHVwRWxlZ2FudFJvdXRlcigpLFxuICAgIHNldHVwVW5vY3NzKHZpdGVFbnYpLFxuICAgIC4uLnNldHVwVW5wbHVnaW4odml0ZUVudiksXG4gICAgcHJvZ3Jlc3MoKSxcbiAgICBzZXR1cEh0bWxQbHVnaW4oYnVpbGRUaW1lKSxcbiAgICBzZXR1cEVsZWN0cm9uKGNvbW1hbmQpXG4gIF07XG5cbiAgcmV0dXJuIHBsdWdpbnM7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXGRldiBwcm9qZWN0XFxcXGg1XFxcXHl6ai1hZG1pbi10ZW1wbGF0ZVxcXFxidWlsZFxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcXFxcYnVpbGRcXFxccGx1Z2luc1xcXFxyb3V0ZXIudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L2RldiUyMHByb2plY3QvaDUveXpqLWFkbWluLXRlbXBsYXRlL2J1aWxkL3BsdWdpbnMvcm91dGVyLnRzXCI7aW1wb3J0IHR5cGUgeyBSb3V0ZU1ldGEgfSBmcm9tICd2dWUtcm91dGVyJztcbmltcG9ydCBFbGVnYW50VnVlUm91dGVyIGZyb20gJ0BlbGVnYW50LXJvdXRlci92dWUvdml0ZSc7XG5pbXBvcnQgdHlwZSB7IFJvdXRlS2V5IH0gZnJvbSAnQGVsZWdhbnQtcm91dGVyL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwRWxlZ2FudFJvdXRlcigpIHtcbiAgcmV0dXJuIEVsZWdhbnRWdWVSb3V0ZXIoe1xuICAgIGxheW91dHM6IHtcbiAgICAgIGJhc2U6ICdzcmMvbGF5b3V0cy9iYXNlLWxheW91dC9pbmRleC52dWUnLFxuICAgICAgYmxhbms6ICdzcmMvbGF5b3V0cy9ibGFuay1sYXlvdXQvaW5kZXgudnVlJ1xuICAgIH0sXG4gICAgcm91dGVQYXRoVHJhbnNmb3JtZXIocm91dGVOYW1lLCByb3V0ZVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IHJvdXRlTmFtZSBhcyBSb3V0ZUtleTtcblxuICAgICAgaWYgKGtleSA9PT0gJ2xvZ2luJykge1xuICAgICAgICBjb25zdCBtb2R1bGVzOiBVbmlvbktleS5Mb2dpbk1vZHVsZVtdID0gWydwd2QtbG9naW4nLCAnY29kZS1sb2dpbicsICdyZWdpc3RlcicsICdyZXNldC1wd2QnLCAnYmluZC13ZWNoYXQnXTtcblxuICAgICAgICBjb25zdCBtb2R1bGVSZWcgPSBtb2R1bGVzLmpvaW4oJ3wnKTtcblxuICAgICAgICByZXR1cm4gYC9sb2dpbi86bW9kdWxlKCR7bW9kdWxlUmVnfSk/YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlUGF0aDtcbiAgICB9LFxuICAgIG9uUm91dGVNZXRhR2VuKHJvdXRlTmFtZSkge1xuICAgICAgY29uc3Qga2V5ID0gcm91dGVOYW1lIGFzIFJvdXRlS2V5O1xuXG4gICAgICBjb25zdCBjb25zdGFudFJvdXRlczogUm91dGVLZXlbXSA9IFsnbG9naW4nLCAnNDAzJywgJzQwNCcsICc1MDAnXTtcblxuICAgICAgY29uc3QgbWV0YTogUGFydGlhbDxSb3V0ZU1ldGE+ID0ge1xuICAgICAgICB0aXRsZToga2V5LFxuICAgICAgICBpMThuS2V5OiBgcm91dGUuJHtrZXl9YCBhcyBBcHAuSTE4bi5JMThuS2V5XG4gICAgICB9O1xuXG4gICAgICBpZiAoY29uc3RhbnRSb3V0ZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBtZXRhLmNvbnN0YW50ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1ldGE7XG4gICAgfVxuICB9KTtcbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcZGV2IHByb2plY3RcXFxcaDVcXFxceXpqLWFkbWluLXRlbXBsYXRlXFxcXGJ1aWxkXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXGRldiBwcm9qZWN0XFxcXGg1XFxcXHl6ai1hZG1pbi10ZW1wbGF0ZVxcXFxidWlsZFxcXFxwbHVnaW5zXFxcXHVub2Nzcy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovZGV2JTIwcHJvamVjdC9oNS95emotYWRtaW4tdGVtcGxhdGUvYnVpbGQvcGx1Z2lucy91bm9jc3MudHNcIjtpbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB1bm9jc3MgZnJvbSAnQHVub2Nzcy92aXRlJztcbmltcG9ydCBwcmVzZXRJY29ucyBmcm9tICdAdW5vY3NzL3ByZXNldC1pY29ucyc7XG5pbXBvcnQgeyBGaWxlU3lzdGVtSWNvbkxvYWRlciB9IGZyb20gJ0BpY29uaWZ5L3V0aWxzL2xpYi9sb2FkZXIvbm9kZS1sb2FkZXJzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwVW5vY3NzKHZpdGVFbnY6IEVudi5JbXBvcnRNZXRhKSB7XG4gIGNvbnN0IHsgVklURV9JQ09OX1BSRUZJWCwgVklURV9JQ09OX0xPQ0FMX1BSRUZJWCB9ID0gdml0ZUVudjtcblxuICBjb25zdCBsb2NhbEljb25QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdzcmMvYXNzZXRzL3N2Zy1pY29uJyk7XG5cbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSBsb2NhbCBpY29uIGNvbGxlY3Rpb24gKi9cbiAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBWSVRFX0lDT05fTE9DQUxfUFJFRklYLnJlcGxhY2UoYCR7VklURV9JQ09OX1BSRUZJWH0tYCwgJycpO1xuXG4gIHJldHVybiB1bm9jc3Moe1xuICAgIHByZXNldHM6IFtcbiAgICAgIHByZXNldEljb25zKHtcbiAgICAgICAgcHJlZml4OiBgJHtWSVRFX0lDT05fUFJFRklYfS1gLFxuICAgICAgICBzY2FsZTogMSxcbiAgICAgICAgZXh0cmFQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaydcbiAgICAgICAgfSxcbiAgICAgICAgY29sbGVjdGlvbnM6IHtcbiAgICAgICAgICBbY29sbGVjdGlvbk5hbWVdOiBGaWxlU3lzdGVtSWNvbkxvYWRlcihsb2NhbEljb25QYXRoLCBzdmcgPT5cbiAgICAgICAgICAgIHN2Zy5yZXBsYWNlKC9ePHN2Z1xccy8sICc8c3ZnIHdpZHRoPVwiMWVtXCIgaGVpZ2h0PVwiMWVtXCIgJylcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIHdhcm46IHRydWVcbiAgICAgIH0pXG4gICAgXVxuICB9KTtcbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcZGV2IHByb2plY3RcXFxcaDVcXFxceXpqLWFkbWluLXRlbXBsYXRlXFxcXGJ1aWxkXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXGRldiBwcm9qZWN0XFxcXGg1XFxcXHl6ai1hZG1pbi10ZW1wbGF0ZVxcXFxidWlsZFxcXFxwbHVnaW5zXFxcXHVucGx1Z2luLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9kZXYlMjBwcm9qZWN0L2g1L3l6ai1hZG1pbi10ZW1wbGF0ZS9idWlsZC9wbHVnaW5zL3VucGx1Z2luLnRzXCI7aW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbk9wdGlvbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IEljb25zIGZyb20gJ3VucGx1Z2luLWljb25zL3ZpdGUnO1xuaW1wb3J0IEljb25zUmVzb2x2ZXIgZnJvbSAndW5wbHVnaW4taWNvbnMvcmVzb2x2ZXInO1xuaW1wb3J0IENvbXBvbmVudHMgZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvdml0ZSc7XG5pbXBvcnQgeyBBbnREZXNpZ25WdWVSZXNvbHZlciwgTmFpdmVVaVJlc29sdmVyIH0gZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvcmVzb2x2ZXJzJztcbmltcG9ydCB7IEZpbGVTeXN0ZW1JY29uTG9hZGVyIH0gZnJvbSAndW5wbHVnaW4taWNvbnMvbG9hZGVycyc7XG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLXN2Zy1pY29ucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFVucGx1Z2luKHZpdGVFbnY6IEVudi5JbXBvcnRNZXRhKSB7XG4gIGNvbnN0IHsgVklURV9JQ09OX1BSRUZJWCwgVklURV9JQ09OX0xPQ0FMX1BSRUZJWCB9ID0gdml0ZUVudjtcblxuICBjb25zdCBsb2NhbEljb25QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdzcmMvYXNzZXRzL3N2Zy1pY29uJyk7XG5cbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSBsb2NhbCBpY29uIGNvbGxlY3Rpb24gKi9cbiAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBWSVRFX0lDT05fTE9DQUxfUFJFRklYLnJlcGxhY2UoYCR7VklURV9JQ09OX1BSRUZJWH0tYCwgJycpO1xuXG4gIGNvbnN0IHBsdWdpbnM6IFBsdWdpbk9wdGlvbltdID0gW1xuICAgIEljb25zKHtcbiAgICAgIGNvbXBpbGVyOiAndnVlMycsXG4gICAgICBjdXN0b21Db2xsZWN0aW9uczoge1xuICAgICAgICBbY29sbGVjdGlvbk5hbWVdOiBGaWxlU3lzdGVtSWNvbkxvYWRlcihsb2NhbEljb25QYXRoLCBzdmcgPT5cbiAgICAgICAgICBzdmcucmVwbGFjZSgvXjxzdmdcXHMvLCAnPHN2ZyB3aWR0aD1cIjFlbVwiIGhlaWdodD1cIjFlbVwiICcpXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBzY2FsZTogMSxcbiAgICAgIGRlZmF1bHRDbGFzczogJ2lubGluZS1ibG9jaydcbiAgICB9KSxcbiAgICBDb21wb25lbnRzKHtcbiAgICAgIGR0czogJ3NyYy90eXBpbmdzL2NvbXBvbmVudHMuZC50cycsXG4gICAgICB0eXBlczogW3sgZnJvbTogJ3Z1ZS1yb3V0ZXInLCBuYW1lczogWydSb3V0ZXJMaW5rJywgJ1JvdXRlclZpZXcnXSB9XSxcbiAgICAgIHJlc29sdmVyczogW1xuICAgICAgICBBbnREZXNpZ25WdWVSZXNvbHZlcih7XG4gICAgICAgICAgaW1wb3J0U3R5bGU6IGZhbHNlXG4gICAgICAgIH0pLFxuICAgICAgICBOYWl2ZVVpUmVzb2x2ZXIoKSxcbiAgICAgICAgSWNvbnNSZXNvbHZlcih7IGN1c3RvbUNvbGxlY3Rpb25zOiBbY29sbGVjdGlvbk5hbWVdLCBjb21wb25lbnRQcmVmaXg6IFZJVEVfSUNPTl9QUkVGSVggfSlcbiAgICAgIF1cbiAgICB9KSxcbiAgICBjcmVhdGVTdmdJY29uc1BsdWdpbih7XG4gICAgICBpY29uRGlyczogW2xvY2FsSWNvblBhdGhdLFxuICAgICAgc3ltYm9sSWQ6IGAke1ZJVEVfSUNPTl9MT0NBTF9QUkVGSVh9LVtkaXJdLVtuYW1lXWAsXG4gICAgICBpbmplY3Q6ICdib2R5LWxhc3QnLFxuICAgICAgY3VzdG9tRG9tSWQ6ICdfX1NWR19JQ09OX0xPQ0FMX18nXG4gICAgfSlcbiAgXTtcblxuICByZXR1cm4gcGx1Z2lucztcbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcZGV2IHByb2plY3RcXFxcaDVcXFxceXpqLWFkbWluLXRlbXBsYXRlXFxcXGJ1aWxkXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXGRldiBwcm9qZWN0XFxcXGg1XFxcXHl6ai1hZG1pbi10ZW1wbGF0ZVxcXFxidWlsZFxcXFxwbHVnaW5zXFxcXGh0bWwudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L2RldiUyMHByb2plY3QvaDUveXpqLWFkbWluLXRlbXBsYXRlL2J1aWxkL3BsdWdpbnMvaHRtbC50c1wiO2ltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEh0bWxQbHVnaW4oYnVpbGRUaW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgcGx1Z2luOiBQbHVnaW4gPSB7XG4gICAgbmFtZTogJ2h0bWwtcGx1Z2luJyxcbiAgICBhcHBseTogJ2J1aWxkJyxcbiAgICB0cmFuc2Zvcm1JbmRleEh0bWwoaHRtbCkge1xuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSgnPGhlYWQ+JywgYDxoZWFkPlxcbiAgICA8bWV0YSBuYW1lPVwiYnVpbGRUaW1lXCIgY29udGVudD1cIiR7YnVpbGRUaW1lfVwiPmApO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gcGx1Z2luO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcXFxcYnVpbGRcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcZGV2IHByb2plY3RcXFxcaDVcXFxceXpqLWFkbWluLXRlbXBsYXRlXFxcXGJ1aWxkXFxcXHBsdWdpbnNcXFxcZWxlY3Ryb24udHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L2RldiUyMHByb2plY3QvaDUveXpqLWFkbWluLXRlbXBsYXRlL2J1aWxkL3BsdWdpbnMvZWxlY3Ryb24udHNcIjtpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcydcbmltcG9ydCBlbGVjdHJvbiBmcm9tICd2aXRlLXBsdWdpbi1lbGVjdHJvbi9zaW1wbGUnXG5pbXBvcnQgcGtnIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbidcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwRWxlY3Ryb24oY29tbWFuZDogJ2J1aWxkJyB8ICdzZXJ2ZScpIHtcbiAgZnMucm1TeW5jKCdkaXN0LWVsZWN0cm9uJywgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG5cbiAgY29uc3QgaXNTZXJ2ZSA9IGNvbW1hbmQgPT09ICdzZXJ2ZSdcbiAgY29uc3QgaXNCdWlsZCA9IGNvbW1hbmQgPT09ICdidWlsZCdcbiAgY29uc3Qgc291cmNlbWFwID0gaXNTZXJ2ZSB8fCAhIXByb2Nlc3MuZW52LlZTQ09ERV9ERUJVR1xuXG4gIHJldHVybiBlbGVjdHJvbih7XG4gICAgbWFpbjoge1xuICAgICAgLy8gU2hvcnRjdXQgb2YgYGJ1aWxkLmxpYi5lbnRyeWBcbiAgICAgIGVudHJ5OiAnZWxlY3Ryb24vbWFpbi9pbmRleC50cycsXG4gICAgICBvbnN0YXJ0KHsgc3RhcnR1cCB9KSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5WU0NPREVfREVCVUcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygvKiBGb3IgYC52c2NvZGUvLmRlYnVnLnNjcmlwdC5tanNgICovJ1tzdGFydHVwXSBFbGVjdHJvbiBBcHAnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0dXAoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdml0ZToge1xuICAgICAgICBidWlsZDoge1xuICAgICAgICAgIHNvdXJjZW1hcCxcbiAgICAgICAgICBtaW5pZnk6IGlzQnVpbGQsXG4gICAgICAgICAgb3V0RGlyOiAnZGlzdC1lbGVjdHJvbi9tYWluJyxcbiAgICAgICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBTb21lIHRoaXJkLXBhcnR5IE5vZGUuanMgbGlicmFyaWVzIG1heSBub3QgYmUgYnVpbHQgY29ycmVjdGx5IGJ5IFZpdGUsIGVzcGVjaWFsbHkgYEMvQysrYCBhZGRvbnMsIFxuICAgICAgICAgICAgLy8gd2UgY2FuIHVzZSBgZXh0ZXJuYWxgIHRvIGV4Y2x1ZGUgdGhlbSB0byBlbnN1cmUgdGhleSB3b3JrIGNvcnJlY3RseS5cbiAgICAgICAgICAgIC8vIE90aGVycyBuZWVkIHRvIHB1dCB0aGVtIGluIGBkZXBlbmRlbmNpZXNgIHRvIGVuc3VyZSB0aGV5IGFyZSBjb2xsZWN0ZWQgaW50byBgYXBwLmFzYXJgIGFmdGVyIHRoZSBhcHAgaXMgYnVpbHQuXG4gICAgICAgICAgICAvLyBPZiBjb3Vyc2UsIHRoaXMgaXMgbm90IGFic29sdXRlLCBqdXN0IHRoaXMgd2F5IGlzIHJlbGF0aXZlbHkgc2ltcGxlLiA6KVxuICAgICAgICAgICAgZXh0ZXJuYWw6IE9iamVjdC5rZXlzKCdkZXBlbmRlbmNpZXMnIGluIHBrZyA/IHBrZy5kZXBlbmRlbmNpZXMgOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBwcmVsb2FkOiB7XG4gICAgICAvLyBTaG9ydGN1dCBvZiBgYnVpbGQucm9sbHVwT3B0aW9ucy5pbnB1dGAuXG4gICAgICAvLyBQcmVsb2FkIHNjcmlwdHMgbWF5IGNvbnRhaW4gV2ViIGFzc2V0cywgc28gdXNlIHRoZSBgYnVpbGQucm9sbHVwT3B0aW9ucy5pbnB1dGAgaW5zdGVhZCBgYnVpbGQubGliLmVudHJ5YC5cbiAgICAgIGlucHV0OiAnZWxlY3Ryb24vcHJlbG9hZC9pbmRleC50cycsXG4gICAgICB2aXRlOiB7XG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgc291cmNlbWFwOiBzb3VyY2VtYXAgPyAnaW5saW5lJyA6IHVuZGVmaW5lZCwgLy8gIzMzMlxuICAgICAgICAgIG1pbmlmeTogaXNCdWlsZCxcbiAgICAgICAgICBvdXREaXI6ICdkaXN0LWVsZWN0cm9uL3ByZWxvYWQnLFxuICAgICAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgICAgIGV4dGVybmFsOiBPYmplY3Qua2V5cygnZGVwZW5kZW5jaWVzJyBpbiBwa2cgPyBwa2cuZGVwZW5kZW5jaWVzIDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgLy8gUGxveWZpbGwgdGhlIEVsZWN0cm9uIGFuZCBOb2RlLmpzIEFQSSBmb3IgUmVuZGVyZXIgcHJvY2Vzcy5cbiAgICAvLyBJZiB5b3Ugd2FudCB1c2UgTm9kZS5qcyBpbiBSZW5kZXJlciBwcm9jZXNzLCB0aGUgYG5vZGVJbnRlZ3JhdGlvbmAgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgTWFpbiBwcm9jZXNzLlxuICAgIC8vIFNlZSBcdUQ4M0RcdURDNDkgaHR0cHM6Ly9naXRodWIuY29tL2VsZWN0cm9uLXZpdGUvdml0ZS1wbHVnaW4tZWxlY3Ryb24tcmVuZGVyZXJcbiAgICByZW5kZXJlcjoge30sXG4gIH0pXG59IiwgIntcbiAgXCJuYW1lXCI6IFwic295YmVhbi1hZG1pblwiLFxuICBcInR5cGVcIjogXCJtb2R1bGVcIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMS4zLjdcIixcbiAgXCJtYWluXCI6IFwiZGlzdC1lbGVjdHJvbi9tYWluL2luZGV4LmpzXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJBIGZyZXNoIGFuZCBlbGVnYW50IGFkbWluIHRlbXBsYXRlLCBiYXNlZCBvbiBWdWUzXHUzMDAxVml0ZTNcdTMwMDFUeXBlU2NyaXB0XHUzMDAxTmFpdmVVSSBhbmQgVW5vQ1NTLiBcdTRFMDBcdTRFMkFcdTU3RkFcdTRFOEVWdWUzXHUzMDAxVml0ZTNcdTMwMDFUeXBlU2NyaXB0XHUzMDAxTmFpdmVVSSBhbmQgVW5vQ1NTXHU3Njg0XHU2RTA1XHU2NUIwXHU0RjE4XHU5NkM1XHU3Njg0XHU0RTJEXHU1NDBFXHU1M0YwXHU2QTIxXHU3MjQ4XHUzMDAyXCIsXG4gIFwiYXV0aG9yXCI6IHtcbiAgICBcIm5hbWVcIjogXCJTb3liZWFuXCIsXG4gICAgXCJlbWFpbFwiOiBcInNveWJlYW5qc0BvdXRsb29rLmNvbVwiLFxuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3NveWJlYW5qc1wiXG4gIH0sXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3NveWJlYW5qcy9zb3liZWFuLWFkbWluXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vc295YmVhbmpzL3NveWJlYW4tYWRtaW4uZ2l0XCJcbiAgfSxcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9zb3liZWFuanMvc295YmVhbi1hZG1pbi9pc3N1ZXNcIlxuICB9LFxuICBcImtleXdvcmRzXCI6IFtcbiAgICBcIlZ1ZTMgYWRtaW4gXCIsXG4gICAgXCJ2dWUtYWRtaW4tdGVtcGxhdGVcIixcbiAgICBcIlZpdGU1XCIsXG4gICAgXCJUeXBlU2NyaXB0XCIsXG4gICAgXCJuYWl2ZS11aVwiLFxuICAgIFwibmFpdmUtdWktYWRtaW5cIixcbiAgICBcImFudC1kZXNpZ24tdnVlIHY0XCIsXG4gICAgXCJVbm9DU1NcIlxuICBdLFxuICBcImVuZ2luZXNcIjoge1xuICAgIFwibm9kZVwiOiBcIj49MTguMTIuMFwiLFxuICAgIFwicG5wbVwiOiBcIj49OC43LjBcIlxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwiYnVpbGRcIjogXCJ2aXRlIGJ1aWxkIC0tbW9kZSBwcm9kXCIsXG4gICAgXCJidWlsZDp0ZXN0XCI6IFwidml0ZSBidWlsZCAtLW1vZGUgdGVzdFwiLFxuICAgIFwiY2xlYW51cFwiOiBcInNhIGNsZWFudXBcIixcbiAgICBcImNvbW1pdFwiOiBcInNhIGdpdC1jb21taXRcIixcbiAgICBcImNvbW1pdDp6aFwiOiBcInNhIGdpdC1jb21taXQgLWw9emgtY25cIixcbiAgICBcImRldlwiOiBcInZpdGUgLS1tb2RlIHRlc3RcIixcbiAgICBcImRldi1lbGVjdHJvblwiOiBcInZpdGUgLS1tb2RlIHRlc3QgZWxlY3Ryb25cIixcbiAgICBcImRldjpwcm9kXCI6IFwidml0ZSAtLW1vZGUgcHJvZFwiLFxuICAgIFwiZ2VuLXJvdXRlXCI6IFwic2EgZ2VuLXJvdXRlXCIsXG4gICAgXCJsaW50XCI6IFwiZXNsaW50IC4gLS1maXhcIixcbiAgICBcInByZXBhcmVcIjogXCJzaW1wbGUtZ2l0LWhvb2tzXCIsXG4gICAgXCJwcmV2aWV3XCI6IFwidml0ZSBwcmV2aWV3XCIsXG4gICAgXCJyZWxlYXNlXCI6IFwic2EgcmVsZWFzZVwiLFxuICAgIFwidHlwZWNoZWNrXCI6IFwidnVlLXRzYyAtLW5vRW1pdCAtLXNraXBMaWJDaGVja1wiLFxuICAgIFwidXBkYXRlLXBrZ1wiOiBcInNhIHVwZGF0ZS1wa2dcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYmV0dGVyLXNjcm9sbC9jb3JlXCI6IFwiMi41LjFcIixcbiAgICBcIkBpY29uaWZ5L3Z1ZVwiOiBcIjQuMS4yXCIsXG4gICAgXCJAc2EvYXhpb3NcIjogXCJ3b3Jrc3BhY2U6KlwiLFxuICAgIFwiQHNhL2NvbG9yXCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkBzYS9ob29rc1wiOiBcIndvcmtzcGFjZToqXCIsXG4gICAgXCJAc2EvbWF0ZXJpYWxzXCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkBzYS91dGlsc1wiOiBcIndvcmtzcGFjZToqXCIsXG4gICAgXCJAdnVldXNlL2NvcmVcIjogXCIxMS4xLjBcIixcbiAgICBcImNsaXBib2FyZFwiOiBcIjIuMC4xMVwiLFxuICAgIFwiZGF5anNcIjogXCIxLjExLjEzXCIsXG4gICAgXCJlY2hhcnRzXCI6IFwiNS41LjFcIixcbiAgICBcImpzb241XCI6IFwiMi4yLjNcIixcbiAgICBcIm5haXZlLXVpXCI6IFwiMi4zOS4wXCIsXG4gICAgXCJucHJvZ3Jlc3NcIjogXCIwLjIuMFwiLFxuICAgIFwicGluaWFcIjogXCIyLjIuMlwiLFxuICAgIFwidGFpbHdpbmQtbWVyZ2VcIjogXCIyLjUuMlwiLFxuICAgIFwidnVlXCI6IFwiMy41LjdcIixcbiAgICBcInZ1ZS1kcmFnZ2FibGUtcGx1c1wiOiBcIjAuNS4zXCIsXG4gICAgXCJ2dWUtaTE4blwiOiBcIjEwLjAuMVwiLFxuICAgIFwidnVlLXJvdXRlclwiOiBcIjQuNC41XCIsXG4gICAgXCJlbGVjdHJvblwiOiBcIl4zMy4wLjFcIixcbiAgICBcImVsZWN0cm9uLWJ1aWxkZXJcIjogXCJeMjUuMS44XCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1lbGVjdHJvblwiOiBcIl4wLjI4LjhcIixcbiAgICBcInZpdGUtcGx1Z2luLWVsZWN0cm9uLXJlbmRlcmVyXCI6IFwiXjAuMTQuNlwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBlbGVnYW50LXJvdXRlci92dWVcIjogXCIwLjMuOFwiLFxuICAgIFwiQGljb25pZnkvanNvblwiOiBcIjIuMi4yNTFcIixcbiAgICBcIkBzYS9zY3JpcHRzXCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkBzYS91bm8tcHJlc2V0XCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkBzb3liZWFuanMvZXNsaW50LWNvbmZpZ1wiOiBcIjEuNC4xXCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIjIyLjUuNVwiLFxuICAgIFwiQHR5cGVzL25wcm9ncmVzc1wiOiBcIjAuMi4zXCIsXG4gICAgXCJAdW5vY3NzL2VzbGludC1jb25maWdcIjogXCIwLjYyLjRcIixcbiAgICBcIkB1bm9jc3MvcHJlc2V0LWljb25zXCI6IFwiMC42Mi40XCIsXG4gICAgXCJAdW5vY3NzL3ByZXNldC11bm9cIjogXCIwLjYyLjRcIixcbiAgICBcIkB1bm9jc3MvdHJhbnNmb3JtZXItZGlyZWN0aXZlc1wiOiBcIjAuNjIuNFwiLFxuICAgIFwiQHVub2Nzcy90cmFuc2Zvcm1lci12YXJpYW50LWdyb3VwXCI6IFwiMC42Mi40XCIsXG4gICAgXCJAdW5vY3NzL3ZpdGVcIjogXCIwLjYyLjRcIixcbiAgICBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiOiBcIjUuMS40XCIsXG4gICAgXCJAdml0ZWpzL3BsdWdpbi12dWUtanN4XCI6IFwiNC4wLjFcIixcbiAgICBcImVzbGludFwiOiBcIjkuMTEuMFwiLFxuICAgIFwiZXNsaW50LXBsdWdpbi12dWVcIjogXCI5LjI4LjBcIixcbiAgICBcImxpbnQtc3RhZ2VkXCI6IFwiMTUuMi4xMFwiLFxuICAgIFwic2Fzc1wiOiBcIjEuNzkuM1wiLFxuICAgIFwic2ltcGxlLWdpdC1ob29rc1wiOiBcIjIuMTEuMVwiLFxuICAgIFwidHN4XCI6IFwiNC4xOS4xXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiNS42LjJcIixcbiAgICBcInVucGx1Z2luLWljb25zXCI6IFwiMC4xOS4zXCIsXG4gICAgXCJ1bnBsdWdpbi12dWUtY29tcG9uZW50c1wiOiBcIjAuMjcuNFwiLFxuICAgIFwidml0ZVwiOiBcIjUuNC42XCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1wcm9ncmVzc1wiOiBcIjAuMC43XCIsXG4gICAgXCJ2aXRlLXBsdWdpbi1zdmctaWNvbnNcIjogXCIyLjAuMVwiLFxuICAgIFwidml0ZS1wbHVnaW4tdnVlLWRldnRvb2xzXCI6IFwiNy40LjVcIixcbiAgICBcInZ1ZS1lc2xpbnQtcGFyc2VyXCI6IFwiOS40LjNcIixcbiAgICBcInZ1ZS10c2NcIjogXCIyLjEuNlwiXG4gIH0sXG4gIFwic2ltcGxlLWdpdC1ob29rc1wiOiB7XG4gICAgXCJjb21taXQtbXNnXCI6IFwicG5wbSBzYSBnaXQtY29tbWl0LXZlcmlmeVwiLFxuICAgIFwicHJlLWNvbW1pdFwiOiBcInBucG0gdHlwZWNoZWNrICYmIHBucG0gbGludC1zdGFnZWRcIlxuICB9LFxuICBcImxpbnQtc3RhZ2VkXCI6IHtcbiAgICBcIipcIjogXCJlc2xpbnQgLS1maXhcIlxuICB9LFxuICBcIndlYnNpdGVcIjogXCJodHRwczovL2FkbWluLnNveWJlYW5qcy5jblwiXG59IiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcXFxcc3JjXFxcXHV0aWxzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcXFxcc3JjXFxcXHV0aWxzXFxcXHNlcnZpY2UudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L2RldiUyMHByb2plY3QvaDUveXpqLWFkbWluLXRlbXBsYXRlL3NyYy91dGlscy9zZXJ2aWNlLnRzXCI7aW1wb3J0IGpzb241IGZyb20gJ2pzb241JztcblxuLyoqXG4gKiBDcmVhdGUgc2VydmljZSBjb25maWcgYnkgY3VycmVudCBlbnZcbiAqXG4gKiBAcGFyYW0gZW52IFRoZSBjdXJyZW50IGVudlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VydmljZUNvbmZpZyhlbnY6IEVudi5JbXBvcnRNZXRhKSB7XG4gIGNvbnN0IHsgVklURV9TRVJWSUNFX0JBU0VfVVJMLCBWSVRFX09USEVSX1NFUlZJQ0VfQkFTRV9VUkwgfSA9IGVudjtcblxuICBsZXQgb3RoZXIgPSB7fSBhcyBSZWNvcmQ8QXBwLlNlcnZpY2UuT3RoZXJCYXNlVVJMS2V5LCBzdHJpbmc+O1xuICB0cnkge1xuICAgIG90aGVyID0ganNvbjUucGFyc2UoVklURV9PVEhFUl9TRVJWSUNFX0JBU0VfVVJMKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKCdWSVRFX09USEVSX1NFUlZJQ0VfQkFTRV9VUkwgaXMgbm90IGEgdmFsaWQganNvbjUgc3RyaW5nJyk7XG4gIH1cblxuICBjb25zdCBodHRwQ29uZmlnOiBBcHAuU2VydmljZS5TaW1wbGVTZXJ2aWNlQ29uZmlnID0ge1xuICAgIGJhc2VVUkw6IFZJVEVfU0VSVklDRV9CQVNFX1VSTCxcbiAgICBvdGhlclxuICB9O1xuXG4gIGNvbnN0IG90aGVySHR0cEtleXMgPSBPYmplY3Qua2V5cyhodHRwQ29uZmlnLm90aGVyKSBhcyBBcHAuU2VydmljZS5PdGhlckJhc2VVUkxLZXlbXTtcblxuICBjb25zdCBvdGhlckNvbmZpZzogQXBwLlNlcnZpY2UuT3RoZXJTZXJ2aWNlQ29uZmlnSXRlbVtdID0gb3RoZXJIdHRwS2V5cy5tYXAoa2V5ID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5LFxuICAgICAgYmFzZVVSTDogaHR0cENvbmZpZy5vdGhlcltrZXldLFxuICAgICAgcHJveHlQYXR0ZXJuOiBjcmVhdGVQcm94eVBhdHRlcm4oa2V5KVxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0IGNvbmZpZzogQXBwLlNlcnZpY2UuU2VydmljZUNvbmZpZyA9IHtcbiAgICBiYXNlVVJMOiBodHRwQ29uZmlnLmJhc2VVUkwsXG4gICAgcHJveHlQYXR0ZXJuOiBjcmVhdGVQcm94eVBhdHRlcm4oKSxcbiAgICBvdGhlcjogb3RoZXJDb25maWdcbiAgfTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIGdldCBiYWNrZW5kIHNlcnZpY2UgYmFzZSB1cmxcbiAqXG4gKiBAcGFyYW0gZW52IC0gdGhlIGN1cnJlbnQgZW52XG4gKiBAcGFyYW0gaXNQcm94eSAtIGlmIHVzZSBwcm94eVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZUJhc2VVUkwoZW52OiBFbnYuSW1wb3J0TWV0YSwgaXNQcm94eTogYm9vbGVhbikge1xuICBjb25zdCB7IGJhc2VVUkwsIG90aGVyIH0gPSBjcmVhdGVTZXJ2aWNlQ29uZmlnKGVudik7XG5cbiAgY29uc3Qgb3RoZXJCYXNlVVJMID0ge30gYXMgUmVjb3JkPEFwcC5TZXJ2aWNlLk90aGVyQmFzZVVSTEtleSwgc3RyaW5nPjtcblxuICBvdGhlci5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIG90aGVyQmFzZVVSTFtpdGVtLmtleV0gPSBpc1Byb3h5ID8gaXRlbS5wcm94eVBhdHRlcm4gOiBpdGVtLmJhc2VVUkw7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYmFzZVVSTDogaXNQcm94eSA/IGNyZWF0ZVByb3h5UGF0dGVybigpIDogYmFzZVVSTCxcbiAgICBvdGhlckJhc2VVUkxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgcHJveHkgcGF0dGVybiBvZiBiYWNrZW5kIHNlcnZpY2UgYmFzZSB1cmxcbiAqXG4gKiBAcGFyYW0ga2V5IElmIG5vdCBzZXQsIHdpbGwgdXNlIHRoZSBkZWZhdWx0IGtleVxuICovXG5mdW5jdGlvbiBjcmVhdGVQcm94eVBhdHRlcm4oa2V5PzogQXBwLlNlcnZpY2UuT3RoZXJCYXNlVVJMS2V5KSB7XG4gIGlmICgha2V5KSB7XG4gICAgcmV0dXJuICcvcHJveHktZGVmYXVsdCc7XG4gIH1cblxuICByZXR1cm4gYC9wcm94eS0ke2tleX1gO1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcXFxcYnVpbGRcXFxcY29uZmlnXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcXFxcYnVpbGRcXFxcY29uZmlnXFxcXHByb3h5LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9kZXYlMjBwcm9qZWN0L2g1L3l6ai1hZG1pbi10ZW1wbGF0ZS9idWlsZC9jb25maWcvcHJveHkudHNcIjtpbXBvcnQgdHlwZSB7IFByb3h5T3B0aW9ucyB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmljZUNvbmZpZyB9IGZyb20gJy4uLy4uL3NyYy91dGlscy9zZXJ2aWNlJztcblxuLyoqXG4gKiBTZXQgaHR0cCBwcm94eVxuICpcbiAqIEBwYXJhbSBlbnYgLSBUaGUgY3VycmVudCBlbnZcbiAqIEBwYXJhbSBlbmFibGUgLSBJZiBlbmFibGUgaHR0cCBwcm94eVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVml0ZVByb3h5KGVudjogRW52LkltcG9ydE1ldGEsIGVuYWJsZTogYm9vbGVhbikge1xuICBjb25zdCBpc0VuYWJsZUh0dHBQcm94eSA9IGVuYWJsZSAmJiBlbnYuVklURV9IVFRQX1BST1hZID09PSAnWSc7XG5cbiAgaWYgKCFpc0VuYWJsZUh0dHBQcm94eSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCB7IGJhc2VVUkwsIHByb3h5UGF0dGVybiwgb3RoZXIgfSA9IGNyZWF0ZVNlcnZpY2VDb25maWcoZW52KTtcblxuICBjb25zdCBwcm94eTogUmVjb3JkPHN0cmluZywgUHJveHlPcHRpb25zPiA9IGNyZWF0ZVByb3h5SXRlbSh7IGJhc2VVUkwsIHByb3h5UGF0dGVybiB9KTtcblxuICBvdGhlci5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIE9iamVjdC5hc3NpZ24ocHJveHksIGNyZWF0ZVByb3h5SXRlbShpdGVtKSk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm94eTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHJveHlJdGVtKGl0ZW06IEFwcC5TZXJ2aWNlLlNlcnZpY2VDb25maWdJdGVtKSB7XG4gIGNvbnN0IHByb3h5OiBSZWNvcmQ8c3RyaW5nLCBQcm94eU9wdGlvbnM+ID0ge307XG5cbiAgcHJveHlbaXRlbS5wcm94eVBhdHRlcm5dID0ge1xuICAgIHRhcmdldDogaXRlbS5iYXNlVVJMLFxuICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICByZXdyaXRlOiBwYXRoID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtpdGVtLnByb3h5UGF0dGVybn1gKSwgJycpXG4gIH07XG5cbiAgcmV0dXJuIHByb3h5O1xufVxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcXFxcYnVpbGRcXFxcY29uZmlnXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFxkZXYgcHJvamVjdFxcXFxoNVxcXFx5emotYWRtaW4tdGVtcGxhdGVcXFxcYnVpbGRcXFxcY29uZmlnXFxcXHRpbWUudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L2RldiUyMHByb2plY3QvaDUveXpqLWFkbWluLXRlbXBsYXRlL2J1aWxkL2NvbmZpZy90aW1lLnRzXCI7aW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1aWxkVGltZSgpIHtcbiAgZGF5anMuZXh0ZW5kKHV0Yyk7XG4gIGRheWpzLmV4dGVuZCh0aW1lem9uZSk7XG5cbiAgY29uc3QgYnVpbGRUaW1lID0gZGF5anMudHooRGF0ZS5ub3coKSwgJ0FzaWEvU2hhbmdoYWknKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcblxuICByZXR1cm4gYnVpbGRUaW1lO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUF3UyxPQUFPQSxjQUFhO0FBQzVULFNBQVMsS0FBSyxxQkFBcUI7QUFDbkMsU0FBUyxjQUFjLGVBQWU7OztBQ0R0QyxPQUFPLFNBQVM7QUFDaEIsT0FBTyxZQUFZO0FBQ25CLE9BQU8saUJBQWlCO0FBQ3hCLE9BQU8sY0FBYzs7O0FDSHJCLE9BQU8sc0JBQXNCO0FBR3RCLFNBQVMscUJBQXFCO0FBQ25DLFNBQU8saUJBQWlCO0FBQUEsSUFDdEIsU0FBUztBQUFBLE1BQ1AsTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLHFCQUFxQixXQUFXLFdBQVc7QUFDekMsWUFBTSxNQUFNO0FBRVosVUFBSSxRQUFRLFNBQVM7QUFDbkIsY0FBTSxVQUFrQyxDQUFDLGFBQWEsY0FBYyxZQUFZLGFBQWEsYUFBYTtBQUUxRyxjQUFNLFlBQVksUUFBUSxLQUFLLEdBQUc7QUFFbEMsZUFBTyxrQkFBa0IsU0FBUztBQUFBLE1BQ3BDO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLGVBQWUsV0FBVztBQUN4QixZQUFNLE1BQU07QUFFWixZQUFNLGlCQUE2QixDQUFDLFNBQVMsT0FBTyxPQUFPLEtBQUs7QUFFaEUsWUFBTSxPQUEyQjtBQUFBLFFBQy9CLE9BQU87QUFBQSxRQUNQLFNBQVMsU0FBUyxHQUFHO0FBQUEsTUFDdkI7QUFFQSxVQUFJLGVBQWUsU0FBUyxHQUFHLEdBQUc7QUFDaEMsYUFBSyxXQUFXO0FBQUEsTUFDbEI7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0YsQ0FBQztBQUNIOzs7QUN4QzRVLE9BQU9DLGNBQWE7QUFDaFcsT0FB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TixZQUFZLEtBQUssVUFBVSxTQUFTO0FBQUEsSUFDdEM7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLE9BQU8sZ0JBQWdCLFNBQVMsV0FBVztBQUFBLE1BQzNDLElBQUk7QUFBQSxRQUNGLGNBQWM7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxzQkFBc0I7QUFBQSxNQUN0QixXQUFXLFFBQVEsb0JBQW9CO0FBQUEsTUFDdkMsaUJBQWlCO0FBQUEsUUFDZixnQkFBZ0I7QUFBQSxNQUNsQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFsicHJvY2VzcyIsICJwcm9jZXNzIiwgInByb2Nlc3MiLCAicHJvY2VzcyIsICJwYXRoIiwgIkZpbGVTeXN0ZW1JY29uTG9hZGVyIiwgInBhdGgiLCAicHJvY2VzcyIsICJGaWxlU3lzdGVtSWNvbkxvYWRlciIsICJwYXRoIiwgInByb2Nlc3MiXQp9Cg==
